home *** CD-ROM | disk | FTP | other *** search
/ World of Education / World of Education.iso / world_s / startrek.zip / FIGURES < prev    next >
Text File  |  1989-05-15  |  61KB  |  2,113 lines

  1.  
  2.  
  3.  
  4.         fig 4.1 LINE NUMBER ALLOCATION FOR THE PROGRAM
  5.  
  6.         10   Heading, manual overhead
  7.         50   Subroutines most commonly used.
  8.         200  MAP  (COMPUTER) ROUTINE
  9.         300  LRS  LONG RANGE SENSOR SCAN ROUTINE
  10.         400  SRS  SHORT RANGE SENSORS
  11.         800  PHA  PHASERS
  12.         1000 TOR  PHOTON TORPEDOES
  13.         1300 NAV  WARP ENGINES/NAVIGATION
  14.         1900 COM  COMPUTER MAIN ROUTINE
  15.         2500 VIS  VISUAL
  16.         2600 RES  RESIGN
  17.         2700 SHE  SHIELDS
  18.         2800 DAM  DAMAGE CONTROL
  19.         3000 Main (PLAYGAME) Loop
  20.         3600 TRA  TRANSPORTER
  21.         3800 SHU  SHUTTLECRAFT
  22.         4300 LRP  LONG RANGE PROBE LAUNCH
  23.         4500 Initialisation Sequence
  24.         5000 SAV  SAVE THE GAME
  25.         5500 LSG  LOAD A SAVED GAME
  26.         6000 Error Trapping and Recovery Routines
  27.         9000 Endgame
  28.         10000 Dummy subroutines used during program testing/integration
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.         fig 4.2 OUTLINE FOR THE PROGRAM
  71.  
  72.         10 REM STARTREK VERSION XX-YY-ZZ
  73.         200 REM MAP (COMPUTER) ROUTINE
  74.         210 GOTO 10000
  75.         300 REM LRS LONG RANGE SENSOR SCAN ROUTINE
  76.         310 GOTO 10000
  77.         400 REM SRS SHORT RANGE SENSORS
  78.         410 GOTO 10000
  79.         800 REM PHA PHASERS
  80.         810 GOTO 10000
  81.         1000 REM TOR PHOTON TORPEDOES
  82.         1010 GOTO 10000
  83.         1300 REM NAV WARP ENGINES/NAVIGATION
  84.         1310 GOTO 10000
  85.         1900 REM MAIN COMPUTER ROUTINE
  86.         1910 GOTO 10000
  87.         2500 REM VIS VISUAL
  88.         2510 GOTO 10000
  89.         2600 REM RES RESIGN
  90.         2610 GOTO 10000
  91.         2700 REM SHE SHIELDS
  92.         2710 GOTO 10000
  93.         2800 REM DAM DAMAGE CONTROL
  94.         2810 GOTO 10000
  95.         3000 REM MAIN LOOP
  96.         3600 REM TRA  TRANSPORTER
  97.         3610 GOTO 10000
  98.         3800 REM SHU  SHUTTLECRAFT
  99.         3810 GOTO 10000
  100.         4300 REM LRP  LONG RANGE PROBE LAUNCH
  101.         4310 GOTO 10000
  102.         4500 REM INITIALISATION SEQUENCE
  103.         5000 REM SAV  SAVE THE GAME
  104.         5010 GOTO 10000
  105.         5500 REM LSG  LOAD A SAVED GAME
  106.         5510 GOTO 10000
  107.         6000 REM ERROR TRAPPING/RECOVERY
  108.         9000 REM ENDGAME
  109.         9010 END
  110.         10000 REM DUMMY ROUTINES USED DURING PROGRAM TESTING/INTEGRATION
  111.         10001 PRINT "FUNCTION NOT PROGRAMMED AT THIS TIME" : RETURN
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.         fig 4.3 FLOWCHART FOR INITIALISING THE VARIABLES
  137.  
  138.         :    INITIALISE.VARIABLES
  139.  
  140.         DISPLAY STARTING MESSAGES
  141.         SET.UP.CONSTANTS.PARAMETERS.&.VARIABLES           (4500)
  142.         ZERO.ALL.FLAGS                                    (4660)
  143.         LOOP (number of rows)                             (4670)
  144.         +    LOOP (number of colums in each row)
  145.         +    +    COMPUTE.NUMBER.OF.STARS                 (4790)
  146.         +    +    STARBASE.PRESENT =?                     (4800)
  147.         +    +    YES  (1)   SUM.TOTAL.OF.STARBASES
  148.         +    +    THEN (1)
  149.         +    +    COMPUTE.NUMBER.OF.KLINGONS              (4810)
  150.         +    +    SUM.TOTAL.OF.KLINGONS
  151.         +    LOOPEND
  152.         LOOPEND
  153.         LOOP ( until number of Klingons sufficient)       (4710)
  154.         +    COMPUTE.RANDOM.QUADRANT.IN.GALAXY
  155.         +    CONTAINS.KLINGONS.OR.STARBASE =?
  156.         +    NO   (2)  COMPUTE.NUMBER.OF.STARS
  157.         +              COMPUTE.NUMBER.OF.KLINGONS
  158.         +              SUM.TOTAL.OF.KLINGONS
  159.         +              COMPUTE.IF.STARBASE.PRESENT.IN.QUADRANT
  160.         +              STARBASE.PRESENT =?
  161.         +              YES  (3)   SUM.TOTAL.OF.STARBASES
  162.         +              THEN (3)
  163.         +    THEN (2)
  164.         LOOPEND
  165.         IS.NUMBER.OF.KLINGONS.MORE.THAN.30 =?                  
  166.         YES  (4)  SET.TOTAL.TIME.=.NUMBER.OF.KLINGONS     (4740)
  167.         NO   (4)  SET.TOTAL.TIME.=.30
  168.         THEN (4)  
  169.         SET.INITIAL.TIME.PARAMETER                        (4750)
  170.         SUM.OF.STARBASES.0 =?
  171.         YES  (5)  COMPUTE.RANDOM.QUADRANT.INSIDE.THE.GALAXY
  172.                   PUT.STARBASE.IN.THAT.QUADRANT
  173.                   TOTAL.OF.STARBASES.=.1
  174.         THEN (5)
  175.         COMPUTE.RANDOM.QUADRANT.INSIDE.THE.GALAXY         (4760)
  176.         POSITION.ENTERPRISE.IN.THAT.QUADRANT
  177.         SET.UP.CONTENTS.OF.QUADRANT                       (4770)
  178.         SET.UP.CONDITION     ;                            (4780)
  179.  
  180.              The numbers in parentheses at the end of some lines refer to 
  181.         the line numbers in the BASIC language implementation of the flow 
  182.         chart.
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.         FIG4.4 BASIC LANGUAGE IMPLEMENTATION OF INITIALISATION/STARTUP SEQUENCE
  203.  
  204.         10 PRINT CHR$(26) : PRINT " STARTREK VERSION 83-05-28 : ON ERROR GOTO 6000
  205.         20 PRINT : PRINT "By Joe Kasser" : PRINT : GOSUB 4500 : GOSUB 4660
  206.         30 PRINT : PRINT K9/100;"Klingons have invaded Federation territory" : PRINT
  207.         40 PRINT "Your mission is to destroy them in";T;"Stardates" : GOTO 3000
  208.  
  209.  
  210.         4500 REM INITIALISATION SEQUENCE
  211.         4510 Z=1 : S$=".*EKB" : E0=4000 : C1=14 : C2=5
  212.         4520 DIM D(C1),D$(C1),Q(7,7),S(7,7),K1(7),K2(7),K3(7),S8(7,7)
  213.         4530 PRINT "Welcome to  the Starfleet  Academy Command Training"
  214.         4540 PRINT "Simulator. You are assigned the role of the captain"
  215.         4550 PRINT "of the Starship Enterprise."
  216.         4560 PRINT : PRINT "For assistance, type HELP or read the manual"
  217.         4570 D$(0)="WARP ENGINES " :D$(1)="SHORT RANGE SENSORS " :D$(2)="LONG RANGE SENSORS " :D$(3)="PHASERS "
  218.         4580 D$(4)="PHOTON TORPEDOES " :D$(5)="COMPUTER " :D$(6)="SHIELDS " :D$(7)="LONG RANGE PROBES "
  219.         4590 D$(8)="TRANSPORTER " :D$(9)="SHUTTLECRAFT " :D$(10)="DAMAGE CONTROL " :D$(11)="VISUAL " :D$(12)="RESIGN"
  220.         4600 D$(13)="SAVE THE STATE OF THE GAME" : D$(14)="LOAD A SAVED GAME"
  221.         4610 C1$="NAVSRSLRSPHATORCOMSHELRPTRASHUDAMVISRESSAVLSGMAPKSTSCA" : C2$="MAPSTAKSTDIRSCA"
  222.         4620 C3$(0)="MAP" : C3$(1)="STAtus (Score)" : C3$(2)="KLINGON STatus"
  223.         4630 C3$(3)="DIRECTION/DISTANCE calculator" : C3$(4)="Sector/System SCAn"
  224.         4650 RETURN
  225.         4660 C9=0 : K4=0 : K5=0 : F9=0 : G9=0 : K9=0 : B9=0 : L3=0 : GOSUB 3550 
  226.         4670 FOR I=0 TO 7 : FOR J=0 TO 7 : GOSUB 4790 : Q(I,J)=-(K+B+S) : NEXT J : NEXT I
  227.         4710 IF K9>2000 THEN 4740
  228.         4720 GOSUB 50 : IF Q(X,Y)<-9 THEN 4720
  229.         4730 GOSUB 4790 : Q(X,Y)=-(K+B+S) : GOTO 4710
  230.         4740 IF K9/100<30 THEN T=30 ELSE T=K9/100
  231.         4750 T9=T+Z : IF B9=0 THEN GOSUB 50 : Q(X,Y)=Q(X,Y)-10 : B9=10 
  232.         4760 GOSUB 50 : Q1=X : Q2=Y : GOSUB 3200 : GOSUB 90 : E1=E0/10 : GOSUB 3400 : RETURN
  233.         4790 S=INT(RND(Z)*7+Z)
  234.         4800 B=0 : IF RND(Z)<.02 THEN B=10 : B9=B9+B
  235.         4810 K=0 : IF RND(Z)<.06 THEN K=INT(RND(Z)*8)*100 : K9=K9+K : K8=K9
  236.         4830 RETURN
  237.  
  238.  
  239.         FIGURE 4.5 SUPPLIMENTARY INITIALISATION SUBROUTINES
  240.  
  241.         50 REM SUBROUTINE TO SET UP 2 RANDOM CO-ORDINATES
  242.         60 X=INT(RND(Z)*8) : Y=INT(RND(Z)*8) : RETURN
  243.  
  244.         90 REM SUBROUTINE TO SET UP ENTERPRISE PARAMETERS
  245.         100 E=E0 : E1=0 : P=10 : RETURN
  246.  
  247.         3200 REM SUBROUTINE TO SET UP QUADRANT
  248.         3340 RETURN
  249.  
  250.         3400 REM SUBROUTINE TO SET UP CONDITION
  251.         3540 RETURN
  252.  
  253.         3550 REM SUBROUTINE TO REPAIR ALL SUB-SYSTEMS
  254.         3560 FOR I = 0 TO C1-C2 : D(I)=0 : NEXT : RETURN
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.         FIGURE 4.6 FLOWCHART FOR THE PLAY.THE.GAME LOOP
  269.  
  270.         :    PLAY.THE.GAME                           (3000)
  271.  
  272.         LAST.COMMAND.MOVE =?                         (3020)
  273.         SHORT.RANGE.SENSORS.DAMAGED =?
  274.         YES  (1)  PERFORM.A.VISUAL.SCAN
  275.         NO   (1)  PERFORM.A.SHORT.RANGE.SENSOR.SCAN
  276.         THEN (1)
  277.         PROMPT.FOR.CHOICE                            (3050)
  278.         WAIT.FOR.REPLY
  279.         IS.REPLY.<.3.CHARACTERS =?
  280.         YES  (2)  DISPLAY.ERROR.PROMPT
  281.         NO   (2)  IS.COMMAND.VALID =?                (3060)
  282.                   YES  (3)  PERFORM.IT               (3080)
  283.                   NO   (3)  DISPLAY.COMMAND.PROMPT
  284.                   THEN (3)
  285.         THEN (2)  ;
  286.         GAME.OVER.FLAG.SET =?                        (3090)
  287.         NO   (4)  LAST.COMMAND.SRS/VIS/KST =?
  288.                   NO   (5)  KLINGONS.IN.QUADRANT =?  (3100)
  289.                             YES  (6)  MOVE.KLINGONS
  290.                                       BACKFIRE
  291.                             THEN (6)
  292.                   THEN (5)
  293.         THEN (4)  ;
  294.  
  295.         FIGURE 4.7 BASIC LANGUAGE IMPLEMENTATION OF THE PLAY.THE.GAME LOOP
  296.  
  297.         3000 REM-MAIN LOOP
  298.         3020 IF C9=0 THEN I=Z : IF D(Z)=0 THEN GOSUB 400 ELSE I=11 : GOSUB 2500
  299.         3040 PRINT
  300.         3050 INPUT "COMMAND ";A$ : IF LEN(A$)<3 THEN PRINT "BEG PARDON CAPTAIN (3 letters please) " : GOTO 3050
  301.         3060 FOR I=0 TO LEN(C1$)/3-Z : IF A$=MID$(C1$,(I*3)+Z,3) THEN 3080
  302.         3070 NEXT :  FOR I=0 TO C1 :  PRINT MID$(C1$,(I*3)+Z,3); TAB(8);D$(I) : NEXT : 
  303.         C9=99 : GOTO 3000
  304.         3080 C9=I : ON I+Z GOSUB 1300,400,300,800,1000,1900,2700,4300,3600,3800,2800,2500,2600,5000,5500,200,1980,2360
  305.         3090 IF F9>0 THEN 9000 ELSE PRINT : IF C9=Z THEN 3110
  306.         3100 IF K>0 THEN GOSUB 700 : GOSUB 600 : IF F9>0 THEN 9000
  307.         3110 GOTO 3000
  308.  
  309.         600 REM BACKFIRE SUBROUTINE
  310.         680 RETURN
  311.  
  312.         700 REM MOVE KLINGON ROUTINE
  313.         740 RETURN
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.         FIGURE 4.8 PROGRAM AT END OF CHAPTER 4
  335.  
  336.         10 PRINT CHR$(26) : PRINT " STARTREK VERSION 83-06-12 : ON ERROR GOTO 6000
  337.         20 PRINT : PRINT "By Joe Kasser" : PRINT : GOSUB 4500 : GOSUB 4660
  338.         30 PRINT : PRINT K9/100;"Klingons have invaded Federation territory" : PRINT
  339.         40 PRINT "Your mission is to destroy them in";T;"Stardates" : GOTO 3000
  340.         50 REM SUBROUTINE TO SET UP 2 RANDOM CO-ORDINATES
  341.         60 X=INT(RND(Z)*8) : Y=INT(RND(Z)*8) : RETURN
  342.         90 REM SUBROUTINE TO SET UP ENTERPRISE PARAMETERS
  343.         100 E=E0 : E1=0 : P=10 : RETURN
  344.         200 REM MAP (COMPUTER) ROUTINE
  345.         210 GOTO 10000
  346.         300 REM LRS LONG RANGE SENSOR SCAN ROUTINE
  347.         310 GOTO 10000
  348.         400 REM SRS SHORT RANGE SENSORS
  349.         410 GOTO 10000
  350.         600 REM BACKFIRE SUBROUTINE
  351.         680 RETURN
  352.         700 REM MOVE KLINGON ROUTINE
  353.         740 RETURN
  354.         800 REM PHA PHASERS
  355.         810 GOTO 10000
  356.         1000 REM TOR PHOTON TORPEDOES
  357.         1010 GOTO 10000
  358.         1300 REM NAV WARP ENGINES/NAVIGATION
  359.         1310 GOTO 10000
  360.         1900 REM MAIN COMPUTER ROUTINE
  361.         1910 GOTO 10000
  362.         2500 REM VIS VISUAL
  363.         2510 GOTO 10000
  364.         2600 REM RES RESIGN
  365.         2610 GOTO 10000
  366.         2700 REM SHE SHIELDS
  367.         2710 GOTO 10000
  368.         2800 REM DAM DAMAGE CONTROL
  369.         2810 GOTO 10000
  370.         3000 REM MAIN LOOP
  371.         3020 IF C9=0 THEN I=Z : IF D(Z)=0 THEN GOSUB 400 ELSE I=11 : GOSUB 2500
  372.         3040 PRINT
  373.         3050 INPUT "COMMAND ";A$ : IF LEN(A$)<3 THEN PRINT "BEG PARDON CAPTAIN (3 letters please) " : GOTO 3050
  374.         3060 FOR I=0 TO LEN(C1$)/3-Z : IF A$=MID$(C1$,(I*3)+Z,3) THEN 3080
  375.         3070 NEXT :  FOR I=0 TO C1 :  PRINT MID$(C1$,(I*3)+Z,3); TAB(8);D$(I) : NEXT : C9=99 : GOTO 3000
  376.         3080 C9=I : ON I+Z GOSUB 1300,400,300,800,1000,1900,2700,4300,3600,3800,2800,2500,2600,5000,5500,200,1980,2360
  377.         3090 IF F9>0 THEN 9000 ELSE PRINT : IF C9=Z THEN 3110
  378.         3100 IF K>0 THEN GOSUB 700 : GOSUB 600 : IF F9>0 THEN 9000
  379.         3110 GOTO 3000
  380.         3200 REM SUBROUTINE TO SET UP QUADRANT
  381.         3340 RETURN
  382.         3400 REM SUBROUTINE TO SET UP CONDITION
  383.         3540 RETURN
  384.         3550 REM SUBROUTINE TO REPAIR ALL SUB-SYSTEMS
  385.         3560 FOR I = 0 TO C1-C2 : D(I)=0 : NEXT : RETURN
  386.         3600 REM TRA  TRANSPORTER
  387.         3610 GOTO 10000
  388.         3800 REM SHU  SHUTTLECRAFT
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.         3810 GOTO 10000
  401.         4300 REM LRP  LONG RANGE PROBE LAUNCH
  402.         4310 GOTO 10000
  403.         4500 REM INITIALISATION SEQUENCE
  404.         4510 Z=1 : S$=".*EKB" : E0=4000 : C1=14 : C2=5
  405.         4520 DIM D(C1),D$(C1),Q(7,7),S(7,7),K1(7),K2(7),K3(7),S8(7,7),C3$(4)
  406.         4530 PRINT "Welcome to  the Starfleet  Academy Command Training"
  407.         4540 PRINT "Simulator. You are assigned the role of the captain"
  408.         4550 PRINT "of the Starship Enterprise."
  409.         4560 PRINT : PRINT "For assistance, type HELP or read the manual"
  410.         4570 D$(0)="WARP ENGINES " :D$(1)="SHORT RANGE SENSORS " :D$(2)="LONG RANGE SENSORS " :D$(3)="PHASERS "
  411.         4580 D$(4)="PHOTON TORPEDOES " :D$(5)="COMPUTER " :D$(6)="SHIELDS " :D$(7)="LONG RANGE PROBES "
  412.         4590 D$(8)="TRANSPORTER " :D$(9)="SHUTTLECRAFT " :D$(10)="DAMAGE CONTROL " :D$(11)="VISUAL " :D$(12)="RESIGN"
  413.         4600 D$(13)="SAVE THE STATE OF THE GAME" : D$(14)="LOAD A SAVED GAME"
  414.         4610 C1$="NAVSRSLRSPHATORCOMSHELRPTRASHUDAMVISRESSAVLSGMAPKSTSCA" : C2$="MAPSTAKSTDIRSCA"
  415.         4620 C3$(0)="MAP" : C3$(1)="STAtus (Score)" : C3$(2)="KLINGON STatus"
  416.         4630 C3$(3)="DIRECTION/DISTANCE calculator" : C3$(4)="Sector/System SCAn"
  417.         4650 RETURN
  418.         4660 C9=0 : K4=0 : K5=0 : F9=0 : G9=0 : K9=0 : B9=0 : L3=0 : GOSUB 3550 
  419.         4670 FOR I=0 TO 7 : FOR J=0 TO 7 : GOSUB 4790 : Q(I,J)=-(K+B+S) : NEXT J : NEXT I
  420.         4710 IF K9>2000 THEN 4740
  421.         4720 GOSUB 50 : IF Q(X,Y)<-9 THEN 4720
  422.         4730 GOSUB 4790 : Q(X,Y)=-(K+B+S) : GOTO 4710
  423.         4740 IF K9/100<30 THEN T=30 ELSE T=K9/100
  424.         4750 T9=T+Z : IF B9=0 THEN GOSUB 50 : Q(X,Y)=Q(X,Y)-10 : B9=10 
  425.         4760 GOSUB 50 : Q1=X : Q2=Y : GOSUB 3200 : GOSUB 90 : E1=E0/10 : GOSUB 3400 : RETURN
  426.         4790 S=INT(RND(Z)*7+Z)
  427.         4800 B=0 : IF RND(Z)<.02 THEN B=10 : B9=B9+B
  428.         4810 K=0 : IF RND(Z)<.06 THEN K=INT(RND(Z)*8)*100 : K9=K9+K : K8=K9
  429.         4830 RETURN
  430.         5000 REM SAV  SAVE THE GAME
  431.         5010 GOTO 10000
  432.         5500 REM LSG  LOAD A SAVED GAME
  433.         5510 GOTO 10000
  434.         6000 REM ERROR TRAPPING/RECOVERY
  435.         9000 REM ENDGAME
  436.         9010 END
  437.         10000 REM DUMMY ROUTINES USED DURING PROGRAM TESTING/INTEGRATION
  438.         10001 PRINT "FUNCTION NOT PROGRAMMED AT THIS TIME" : RETURN
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450.  
  451.  
  452.  
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.         FIGURE 5.1 FLOWCHART FOR THE DAMAGE.CONTROL COMMAND
  467.  
  468.         :    DAMAGE.CONTROL                                     (2800)
  469.  
  470.         DISPLAY.HEADING                                         (2810)
  471.         ANY.SUBSYSTEM.DAMAGED =?                                (2820)
  472.         YES  (1)  LOOP (number of sub-systems)                  (2850)
  473.                   +    SUB.SYSTEM.DAMAGED =?
  474.                   +    YES  (2)  DISPLAY.ESTIMATED.REPAIR.TIME
  475.                   +    THEN (2)
  476.                   LOOPEND                                       (2860)
  477.                   KLINGONS.IN.QUADRANT =? (Battle going on ? )
  478.                   NO   (3)  REPAIR.TIME.ALLOCATION.DIALOG       (2870)
  479.                             LOOP (number of sub-systems)        (2880)
  480.                             +    IS.SUB.SYSTEM.DAMAGED =?
  481.                             +    YES  (4)  ADJUST.REPAIR.TIME.FOR.SUB-SYSTEM    (2890)
  482.                             +              REPAIR.TIME.=<.0 =?
  483.                             +              YES  (5)  SET.IT.TO.0
  484.                             +                        DISPLAY.REPAIRED.STATUS.MESSAGE
  485.                             +              THEN (5)
  486.                             +    THEN (4)
  487.                             LOOPEND                             (2900)
  488.                             UPDATE DAYS LEFT
  489.                   THEN (3)
  490.         NO   (1)  DISPLAY.ALL.OK.MESSAGE
  491.         THEN (1)  ;                                             (2910)
  492.  
  493.         FIGURE 5.2 BASIC LANGUAGE IMPLEMENTATION OF DAMAGE CONTROL COMMAND
  494.  
  495.         2800 REM DAM DAMAGE CONTROL
  496.         2810 GOSUB 70 : D8=0
  497.         2820 FOR I=0 TO C1-C2 : IF D(I)>0 THEN D8=D8+Z 
  498.         2830 NEXT: PRINT : IF D8=0 THEN PRINT : PRINT "ALL SYSTEMS A-OK !": GOTO 2910 
  499.         2840 PRINT "SYSTEM";TAB(28);"ETR" : PRINT
  500.         2850 FOR I=0 TO C1-C2 : IF D(I)>0 THEN PRINT D$(I);TAB(28);INT(D(I)+Z)
  501.         2860 NEXT : IF K>0 THEN 2910
  502.         2870 PRINT :INPUT "HOW MANY DAYS TO SPEND ON REPAIRS SIR ";D8 : IF D8<0 THEN D8=0
  503.         2880 FOR I=0 TO C1-C2 : IF D(I)=0 THEN 2900
  504.         2890 D(I)=D(I)-D8 : IF D(I)=<0 THEN D(I)=0 : PRINT D$(I); "REPAIRED"
  505.         2900 NEXT : T=T-D8
  506.         2910 RETURN
  507.  
  508.         70 REM SUB TO PRINT HEADING
  509.         80 PRINT : PRINT D$(I);"AT QUADRANT";Q1+Z;",";Q2+Z : PRINT : RETURN 
  510.  
  511.  
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.         FIGURE 5.3 FLOWCHART FOR THE MAP COMMAND
  534.  
  535.         :    MAP                                                (200)
  536.  
  537.         IS.MAP.DAMAGED =?                                       (210)
  538.         YES  (1)  DISPLAY.DAMAGED.MESSAGE
  539.         NO   (1)  DISPLAY.HEADING                               (220)
  540.                   DISPLAY.COLUMN.NUMBERS
  541.                   LOOP (on rows in galaxy)
  542.                   +    DISPLAY.ROW.NUMBER
  543.                   +    LOOP (on columns)                        (230)
  544.                   +    IS.ENTERPRISE.IN.QUADRANT =?
  545.                   +    +    YES  (2)  IS.QUADRANT.SCANNED =?
  546.                   +    +              NO   (3)  DISPLAY.UNSCANNED.PINPOINT.LOCATION
  547.                   +    +              THEN (3)
  548.                   +    +    THEN (2)
  549.                   +    +    IS.QUADRANT.UNSCANNED =?            (240)
  550.                   +    +    YES  (4)  DISPLAY.BLANK.QUADRANT
  551.                   +    +    NO   (4)  IS.ENTERPRISE.IN.QUADRANT (250)
  552.                   +    +              YES  (5)  DISPLAY.SCANNED.PINPOINT.LOCATION
  553.                   +    +              NO   (5)  DISPLAY.CONTENTS.OF.QUADRANT   (260)
  554.                   +    +              THEN (5)
  555.                   +    +    THEN (4)  DISPLAY."SPACE"
  556.                   +    LOOPEND                                  (270)
  557.                   +    ADVANCE.DISPLAY.TO.NEXT.LINE
  558.                   LOOPEND
  559.         THEN (1)  ;                                             (280)
  560.  
  561.  
  562.         FIGURE 5.4 BASIC LANGUAGE IMPELEMENTATION OF THE MAP SUBROUTINE
  563.  
  564.         200 REM MAP (COMPUTER) ROUTINE
  565.         210 I=5 : IF D(I)>0 THEN PRINT "COMPUTER DOWN AT THIS TIME " : GOTO 280
  566.         220 GOSUB 70 : FOR I=0 TO 7 : PRINT TAB((Z+I)*5);I+Z; : NEXT : PRINT : FOR I=0 TO 7 : PRINT I+Z ;
  567.         230 FOR J=0 TO 7 : PRINT " "; : IF I=Q1 AND J=Q2 AND Q(I,J)<0 THEN PRINT CHR$(8);"+***+"; : GOTO 270
  568.         240 IF Q(I,J)<0 THEN PRINT "*** "; : GOTO 270
  569.         250 E$=STR$(Q(I,J)) : E$=" 00"+MID$(E$,2) : IF I=Q1 AND J=Q2 THEN PRINT CHR$(8);"+";RIGHT$(E$,3);"+";  : GOTO 270
  570.         260 PRINT RIGHT$(E$,3);" ";
  571.         270 NEXT J : PRINT : NEXT I
  572.         280 RETURN
  573.  
  574.  
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.         FIGURE 5.5 FLOWCHART FOR THE LONG RANGE SENSORS COMMAND
  599.  
  600.         :    LONG.RANGE.SENSORS                                (300)
  601.  
  602.         ARE.SENSORS.DAMAGED =?                                 (310)
  603.         YES  (1)  DISPLAY.DAMAGED.MESSAGE
  604.         NO   (1)  DISPLAY.HEADING                              (320)
  605.                   LOOP (on rows -/+ position)
  606.                   +    LOOP (on columns -/+ position in row)
  607.                   +    +    DISPLAY.SPACE.CHARACTER
  608.                   +    +    QUADRANT.IN.GALAXY =?              (330)
  609.                   +    +    YES  (2)  COMPUTER.DAMAGED =?      (340)
  610.                   +    +              NO   (3)  SCAN.QUADRANT
  611.                   +    +              THEN (3)
  612.                   +    +              DISPLAY.CONTENTS.OF.QUADRANT  (350)
  613.                   +    +    NO   (2)  DISPLAY.ZERO.QUADRANT
  614.                   +    +    THEN (2)  
  615.                   +    LOOPEND                                 (360)
  616.                   +    ADVANCE.DISPLAY.TO.NEXT.LINE
  617.                   LOOPEND
  618.         THEN (1)  ;
  619.  
  620.         FIGURE 5.6 BASIC LANGUAGE VERSION OF LONG RANGE SENSORS SUBROUTINE
  621.  
  622.         300 REM LRS LONG RANGE SENSOR SCAN ROUTINE
  623.         310 IF D(I)>0 THEN PRINT D$(I); " DAMAGED" : GOTO 370
  624.         320 GOSUB 70 : FOR I=Q1-Z TO Q1+Z : FOR J=Q2-Z TO Q2+Z: PRINT " ";
  625.         330 IF I<0 OR I>7 OR J<0 OR J>7 THEN PRINT "***" ; : GOTO 360
  626.         340 IF D(5)=0 THEN Q(I,J)=ABS(Q(I,J))
  627.         350 E$=STR$(Q(I,J)) : E$="00"+MID$(E$,2) : PRINT RIGHT$(E$,3);
  628.         360 NEXT J : PRINT : NEXT I
  629.         370 RETURN
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.         FIGURE 6.1 FLOWCHART FOR THE SHORT RANGE SENSORS SUBROUTINE
  665.  
  666.         :    SHORT.RANGE.SENSORS                                (400)
  667.  
  668.         ARE.SENSORS.DAMAGED =?                                  (410)
  669.         YES  (1)  DISPLAY.DAMAGED.MESSAGE
  670.         NO   (1)  IS.QUADRANT.INSIDE.THE.GALAXY =?
  671.                   YES  (2)  COMPUTER.DAMAGED =?                 (430)
  672.                             NO   (3)  UPDATE.MAP.DATA
  673.                             THEN (3)
  674.                   THEN (2)
  675.                   DISPLAY.HEADING                               (440)
  676.                   DETERMINE.CURRENT.CONDITION
  677.                   DISPLAY.COLUMN.NUMBERS
  678.                   DISPLAY.CURRENT.SCORE
  679.                   LOOP (On rows)
  680.                   +    LOOP (On columns in row)                 (450)
  681.                   +    +    DISPLAY.CONTENTS.OF SECTOR
  682.                   +    +    DISPLAY."SPACE"
  683.                   +    LOOPEND
  684.                   +    DISPLAY.GAME.STATUS.INFORMATION.ITEMS    (460)
  685.                   +    ADVANCE.DISPLAY.TO.NEXT.LINE
  686.                   LOOPEND                                       (550)
  687.         THEN (1)  ;
  688.  
  689.         FIGURE 6.2 BASIC LANGUAGE IMPLEMENTATION OF SHORT RANGE SENSOR SUBROUTINE
  690.  
  691.         400 REM SRS SHORT RANGE SENSORS
  692.         410 IF D(I)>0 THEN PRINT D$(I); " DAMAGED" : RETURN
  693.         420 IF Q1<0 OR Q1>7 OR Q2<0 OR Q2>7 THEN 440
  694.         430 IF D(5)=0 THEN Q(Q1,Q2)=ABS(Q(Q1,Q2))
  695.         440 GOSUB 70 : GOSUB 3400 : PRINT "   1 2 3 4 5 6 7 8";TAB(20); : GOSUB 170  : FOR I=0 TO 7 : PRINT I+Z ;
  696.         450 FOR J=0 TO 7 : PRINT MID$(S$,S(I,J),Z); " ";: NEXT J : PRINT TAB(20) ;  
  697.         460 ON I+Z GOTO 470,480,490,500,510,520,530,540
  698.         470 PRINT "DAYS LEFT"; TAB(38);T : GOTO 550
  699.         480 PRINT "CONDITION "; TAB(38);C$ : GOTO 550
  700.         490 PRINT "SHIELDS"; TAB(38);E1 : GOTO 550
  701.         500 PRINT "ENERGY" ; TAB(38);E : GOTO 550
  702.         510 PRINT "PHOTON TORPEDOES";TAB(38);P : GOTO 550
  703.         520 PRINT "STARBASES";TAB(38);B9/10 : GOTO 550
  704.         530 PRINT "KLINGONS LEFT";TAB(38);K9/100 : GOTO 550
  705.         540 PRINT "KLINGONS CAPTURED";TAB(38);K4 : GOTO 550
  706.         550 NEXT I : RETURN
  707.  
  708.  
  709.         170 REM SUBROUTINE TO PRINT SCORE
  710.         180 N=INT(((K8-K9)/100)*(K5/2.5+K4+Z)^2*100/(T9-T)) : IF N<0 THEN N=0
  711.         190 PRINT "SCORE";TAB(38);N : RETURN
  712.  
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.  
  720.  
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730.         FIGURE 6.3 FLOWCHART FOR THE VISUAL COMMAND
  731.  
  732.         : VISUAL                                               (2500)
  733.  
  734.         DISPLAY.HEADING                                        (2510)
  735.         LOOP (+/- 2 rows)
  736.         +    LOOP (+/- 2 columns)
  737.         +    +    SECTOR.INSIDE.QUADRANT =?                    (2520)
  738.         +    +    YES  (1)  DISPLAY.CONTENTS.OF.SECTOR
  739.         +    +    NO   (1)  DISPLAY.$.SIGN (Out of Quadrant)
  740.         +    +    THEN (1)
  741.         +    +    DISPLAY.SPACE.CHARACTER                      (2540)
  742.         +    LOOPEND
  743.         +    ADVANCE.TO.NEXT.LINE
  744.         LOOPEND
  745.         SET.LAST.COMMAND.FLAG.=.SRS ;
  746.  
  747.         FIGURE 6.4 BASIC LANGUAGE IMPLEMENTATATION OF THE VISUAL SUBROUTINE
  748.  
  749.         2500 REM VIS VISUAL
  750.         2510 GOSUB 70 : FOR I=S1-2 TO S1+2 : FOR J=S2-2 TO S2+2
  751.         2520 IF I<0 OR I>7 OR J<0 OR J>7 THEN PRINT "$"; : GOTO 2540
  752.         2530 PRINT MID$(S$,S(I,J),Z);
  753.         2540 PRINT " "; : NEXT : PRINT : NEXT : C9=Z : RETURN
  754.  
  755.  
  756.  
  757.  
  758.  
  759.  
  760.  
  761.  
  762.  
  763.  
  764.  
  765.  
  766.  
  767.  
  768.  
  769.  
  770.  
  771.  
  772.  
  773.  
  774.  
  775.  
  776.  
  777.  
  778.  
  779.  
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786.  
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.         FIGURE 6.5 FLOWCHART FOR SETTING UP CONTENTS OF A QUADRANT
  797.  
  798.         :    SET.UP.QUADRANT                                   (3200)
  799.  
  800.         CLEAR.ALL.SECTORS                                      (3210)
  801.         RESET.SECTOR.SCANNED.FLAG
  802.         IS.QUADRANT.IN.GALAXY    =)
  803.         YES  (1)  COMPUTE.UP.NUMBER.OF.KLINGONS                (3230)
  804.                   SET.UP.STARBASE.VALUE
  805.                   COMPUTE.UP.NUMBER.OF.STARS                   (3240)
  806.         NO   (1)  CLEAR.STARBASE.COUNT
  807.                   SET.UP.ZERO.KLINGONS
  808.                   RANDOM.PROBABILITY.OF.SINGLE.STAR
  809.         THEN (1)
  810.         POSITION.ENTERPRISE                                    (3250)
  811.         STARBASE.IN.QUADRANT =?
  812.         YES  (2)  POSITION.STARBASE                            (3260)
  813.         THEN (2)
  814.         LOOP (number of STARS)                                 (3270)
  815.         +    POSITION.STAR
  816.         ENDLOOP
  817.         RESET.KLINGON.STATUS
  818.         KLINGONS.IN.QUADRANT =?
  819.         YES  (3)  LOOP (number of KLINGONS)                    (3300)
  820.                   +    POSITION.KLINGON
  821.                   LOOPEND
  822.                   DISPLAY.RED.ALERT.MESSAGE
  823.                   SHIELDS.DOWN =?
  824.                   YES  (4)  DISPLAY.MESSAGE
  825.                   THEN (4)
  826.         THEN (3)  ;                                            (3340)
  827.  
  828.         FIGURE 6.6 BASIC LANGUAGE VERSION OF THE SUBROUTINE FOR SETTING UP A QUADRANT
  829.  
  830.         3200 REM SUBROUTINE TO SET UP QUADRANT
  831.         3210 FOR I=0 TO 7 : FOR J=0 TO 7 : S(I,J)=Z : NEXT J : NEXT I : S9=0
  832.         3220 IF Q1<0 OR Q1>7 OR Q2<0 OR Q2>7 THEN K=0 : B=0 : S=INT(RND(Z)*1.2) : GOTO 3250
  833.         3230 N=ABS(Q(Q1,Q2)) : K=INT(N/100) : N=N-K*100 : B=INT(N/10)
  834.         3240 S=ABS(Q(Q1,Q2))-(K*100+B*10) 
  835.         3250 GOSUB 50 : S1=X : S2=Y : S(X,Y)=3 : IF B=0 THEN 3270
  836.         3260 GOSUB 50 : IF S(X,Y)<>Z THEN 3260 ELSE S(X,Y)=5
  837.         3270 FOR I=1 TO S : GOSUB 50 : IF S(X,Y)<>Z THEN 3280 ELSE S(X,Y)=2
  838.         3290 NEXT : FOR I=0 TO 7 : K3(I)=0 : NEXT : IF K=0 THEN 3340 
  839.         3300 FOR I=1 TO K
  840.         3310 GOSUB 50 : IF S(X,Y)<>Z THEN 3310 ELSE S(X,Y)=4
  841.         3320 K1(I)=X : K2(I)=Y : K3(I)=RND(Z)*1000 : NEXT : PRINT : FOR I=Z TO 3 : PRINT "RED ALERT      "; : NEXT
  842.         3330 PRINT CHR$(7) : IF E1=0 THEN PRINT "YOU FORGOT TO RAISE YOUR SHIELDS"
  843.         3340 RETURN
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.         FIGURE 6.7 FLOWCHART TO DETERMINE THE CONDITION OF THE ENTERPRISE
  863.  
  864.         : TEST.AND.SET.CONDITION                               (3400)
  865.  
  866.         ENTERPRISE.NEXT.TO.STARBASE =?                         (3430)
  867.         YES  (1)  CONDITION.DOCKED =?                          (3450)
  868.                   YES  (2)  UPDATE.PARAMETERS
  869.                   NO   (2)  KLINGONS.IN.QUADRANT =?            (3460)
  870.                             YES  (3)  50%.PROBABILITY. =?
  871.                                       YES  (4)  <DOCK>         (3470)
  872.                                                 DISPLAY.DOCKED.MESSAGE
  873.                                                 UPDATE.PARAMETERS
  874.                                                 SET.CONDITION.DOCKED
  875.                                       THEN (4)
  876.                             NO   (3)  <DOCK>
  877.                                       DISPLAY.DOCKED.MESSAGE
  878.                                       UPDATE.PARAMETERS
  879.                                       SET.CONDITION.DOCKED
  880.                             THEN (3)
  881.                    THEN (2)
  882.          NO   (1)  KLINGONS.IN.QUADRANT =?                     (3490)
  883.                    YES  (5)  SET.CONDITION.RED
  884.                    NO   (5)  SUBSYSTEM.DAMAGED =?              (3500)
  885.                              YES  (6)  SET.CONDITION.YELLOW
  886.                              NO   (6)  ENERGY.LOW =?
  887.                                        YES  (7)  SET.CONDITION.YELLOW
  888.                                        NO   (7)  SET.CONDITION.GREEN  (3530)
  889.                                        THEN (7)
  890.                              THEN (6)
  891.                    THEN (5)
  892.          THEN (1)  ;                                           (3540)
  893.  
  894.         FIGURE 6.8 BASIC LANGUAGE VERSION OF SUBROUTINE TO SET UP THE CONDITION OF THE ENTERPRISE
  895.  
  896.         3400 REM SUBROUTINE TO SET UP CONDITION
  897.         3410 FOR I=S1-Z TO S1+Z : FOR J=S2-Z TO S2+Z
  898.         3420 IF I<0 OR I>7 OR J<0 OR J>7 THEN 3440
  899.         3430 IF S(I,J)=5 THEN 3450
  900.         3440 NEXT J : NEXT I : GOTO 3490
  901.         3450 IF C$="DOCKED" THEN GOSUB 90 : GOSUB 3550 : GOTO 3540
  902.         3460 IF K>0 AND RND(Z)<.5 THEN 3490
  903.         3470 PRINT : PRINT D$(6);"LOWERED FOR DOCKING" : GOSUB 3550 : PRINT : PRINT "REPAIRS and REFUELLING completed"
  904.         3480 GOSUB 90 : T=T-.5 : C$="DOCKED": GOTO 3540
  905.         3490 IF K>0 THEN C$="RED" : GOTO 3540
  906.         3500 FOR I=0 TO C1-C2 : IF D(I)>0 THEN C$="YELLOW" : GOTO 3540
  907.         3510 NEXT : IF E=<E0/10 THEN C$="YELLOW" ELSE C$="GREEN"
  908.         3540 RETURN
  909.  
  910.  
  911.  
  912.  
  913.  
  914.  
  915.  
  916.  
  917.  
  918.  
  919.  
  920.  
  921.  
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.         FIGURE 7.1 FLOWCHART FOR THE ENDGAME SEQUENCE
  929.  
  930.         : ENDGAME                                              (9000)
  931.  
  932.         FLAG.=.1 =?                                            (9010)
  933.         YES  (1)  RESIGNATION.ENDING                           (9020)
  934.         NO   (1)  FLAG.=.2 =?
  935.                   YES  (2)  DESTROYED.BY.KLINGON               (9040)
  936.                   NO   (2)  FLAG.=.3 =?
  937.                             YES  (3)  ENTERPRISE.RAN.OUT.OF.ENERGY (9080)
  938.                             NO   (3)  FLAG.=.4  =?
  939.                                       YES  (4)  ALLOTED.TIME.OVER  (9130)
  940.                                       NO   (4)  PLAYER.WINS.GAME   (9160)
  941.                                       THEN (4)
  942.                             THEN (3)
  943.                   THEN (2)
  944.         THEN (1)
  945.         DISPLAY.SCORE                                          (9180)
  946.         NEW.GAME.DIALOG
  947.         NEW.GAME.DESIRED =?
  948.         YES  (5)  PROMPT.FOR.STANDBY                           (9220)
  949.                   RESET.FLAGS.AND.VARIABLES
  950.                   DISPLAY.MISSION.MESSAGE
  951.                   PLAY.THE.GAME
  952.         NO   (5)  RETURN.TO.BASIC.COMMAND.LEVEL
  953.         THEN (5)  ;
  954.  
  955.         FIGURE 7.2 BASIC VERSION OF ENDGAME ROUTINE
  956.  
  957.         9000 REM ENDGAME
  958.         9010 PRINT : ON F9 GOTO 9020,9040,9080,9130,9160
  959.         9020 REM F9=1 RESIGNATION ENDING
  960.         9030 GOTO 9180
  961.         9040 REM F9=2 CREAMED BY KLINGON
  962.         9050 PRINT "THE ENTERPRISE HAS BEEN DESTROYED "
  963.         9060 PRINT "You did not make such a good Captain, did you ? "
  964.         9070 GOTO 9180 
  965.         9080 REM F9=3 RAN OUT OF ENERGY
  966.         9090 PRINT "The Enterprise has run out of energy." : PRINT
  967.         9100 PRINT "You have just condemed yourself and your crew to"
  968.         9110 PRINT "a horrible and un-necessary death."
  969.         9120 GOTO 9180
  970.         9130 REM F9=4 RAN OUT OF TIME
  971.         9140 PRINT "You did not complete your mission in time"
  972.         9150 GOTO 9180
  973.         9160 REM F9=5 PLAYER WON
  974.         9170 PRINT "CONGRATULATIONS you passed your test"
  975.         9180 PRINT : GOSUB 170 : INPUT "Do you want to play again (Yes/No) "; A$ : IF LEN(A$)=0 THEN 9180
  976.         9190 IF LEFT$(A$,Z)="N" THEN 9230
  977.         9200 IF LEFT$(A$,Z)<>"Y" THEN 9180
  978.         9210 REM START NEW GAME
  979.         9220 PRINT CHR$(26): PRINT : PRINT "WAIT FOR IT" : GOSUB 4660 : GOTO 30
  980.         9230 END
  981.  
  982.  
  983.  
  984.  
  985.  
  986.  
  987.  
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994.         FIGURE 7.3 FLOWCHART FOR THE MOVE SUBROUTINE
  995.  
  996.         :    MOVE (NAVIGATION)                                  (1300)
  997.  
  998.         DETERMINE.COURSE.DIRECTION                              (1310)
  999.         DETERMINE.WARP.FACTOR                                   (1320)
  1000.         WARP.FACTOR.<.MINIMUM =?
  1001.              NO   (1)  WARP.FACTOR.>.MAXIMUM =?                 (1330)
  1002.                        YES  (2)  DISPLAY.ERROR.MESSAGE
  1003.                        NO   (2)  WARPFACTOR.>.1 =?              (1340)
  1004.                                  YES   (3)   ENGINES.DAMAGED =? (1350)
  1005.                                              YES  (4)  DISPLAY.DAMAGED.MESSAGE
  1006.                                                        DIALOG.FOR.NEW.LEGAL.WARP.FACTOR
  1007.                                              THEN (4)
  1008.                                              KLINGONS.IN.QUADRANT =?             (1370)
  1009.                                              YES  (5)  BACKFIRE
  1010.                                                        GAMEOVER.FLAG.=.0 =?
  1011.                                                        NO   (6)  MOVE.TO.NEW.SECTOR        (1360)
  1012.                                                                INSIDE.SAME.QUADRANT =?         (1400)
  1013.                                                                YES  (7)  SECTOR.OCCUPIED =?    (1410)
  1014.                                                                          YES  (8)  BACK.UP.ONE
  1015.                                                                                    COLLISION
  1016.                                                                          THEN (8)  
  1017.                                                                NO   (7)  MOVE.TO.NEW.QUADRANT  (1500)
  1018.                                                                THEN (7)
  1019.                                                                TIME.FOR.RANDOM.EVENT =?        (1570)
  1020.                                                                YES  (6)  PERFORM.RANDOM.EVENT
  1021.                                                                THEN (6)
  1022.                                                                USE.ENERGY                      (1720)
  1023.                                                                ENERGY.LEVEL.>0 =?
  1024.                                                                YES  (7)  REPAIR.AS.YOU.GO                (1730)
  1025.                                                                          SET.UP.CONDITION                 (1740)
  1026.                                                                THEN (7)
  1027.                                                 THEN (5)
  1028.                                       THEN (4)
  1029.                             THEN (3)
  1030.                    THEN (2)  
  1031.         THEN (1)  ;                                            (1750)
  1032.  
  1033.  
  1034.  
  1035.  
  1036.  
  1037.  
  1038.  
  1039.  
  1040.  
  1041.  
  1042.  
  1043.  
  1044.  
  1045.  
  1046.  
  1047.  
  1048.  
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060.         FIGURE 7.4 FLOWCHART FOR THE COLLISION EVENT
  1061.  
  1062.         : COLLISION                                       (1410)
  1063.  
  1064.         HIT.A.STAR =?            
  1065.         YES  (1)  DISPLAY.MESSAGE                         (1420)
  1066.                   FORTY.PERCENT.PROBABILITY =?
  1067.                   YES  (2)  STARBASE.IN.QUADRANT =?
  1068.                             YES  (3)  ENGINE.SHUT.DOWN
  1069.                                       BACK.UP.ONE.SECTOR
  1070.                             NO   (3)  SPACE.WARP
  1071.                             THEN (3)
  1072.                   NO   (2)  ENGINE.SHUT.DOWN
  1073.                             BACK.UP.ONE.SECTOR
  1074.                   THEN (2)
  1075.         NO   (1)  HIT.A.KLINGON =?
  1076.                   YES  (4)  DISPLAY.MESSAGE               (1440)
  1077.                             BACK.UP.ONE.SECTOR
  1078.                             DAMAGE.SOMETHING
  1079.                   THEN (4)
  1080.                   (HIT.A.STARBASE)
  1081.                   BACK.UP.ONE.SECTOR                      (1450)
  1082.                   DISPLAY.MESSAGE
  1083.                   KLINGONS.IN.QUADRANT =?
  1084.                             YES  (5)  DISPLAY.MESSAGE (CLUMSY)
  1085.                             NO   (5)  DISPLAY.MESSAGE (TRACTOR BEAM)
  1086.                             THEN (5)
  1087.         THEN (1)  ;                                       (1480)
  1088.  
  1089.         FIGURE 7.5 FLOWCHART FOR THE MOVE.TO.NEW.QUADRANT
  1090.  
  1091.         :    MOVE.TO.NEW.QUADRANT                              (1490)
  1092.  
  1093.         COMPUTE.QUADRANT.NUMBER                                (1500)
  1094.         ADJUST ELAPSED.TIME
  1095.         INSIDE.GALAXY =?                                       (1510)
  1096.         YES  (1)  WAS.ENTERPRISE.OUTSIDE.GALAXY =?             (1530)
  1097.                   YES  (2)  DISPLAY.BOUNDARY.CROSSING.MESSAGE
  1098.                             DAMAGE.SOMETHING
  1099.                             SET.GALAXY.FLAG.=.INSIDE
  1100.                   THEN (2)  
  1101.         NO   (1)  (Outside)
  1102.                   WAS.ENTERPRISE.INSIDE.GALAXY =?              (1550)
  1103.                   YES  (3)  DISPLAY.BOUNDARY.CROSSING.MESSAGE
  1104.                             DAMAGE.SOMETHING
  1105.                             SET.GALAXY.FLAG.=.OUTSIDE
  1106.                   THEN (3)
  1107.         THEN (1)
  1108.         SET.UP.CONTENTS.OF.QUADRANT  ;                         (1570)   
  1109.  
  1110.  
  1111.  
  1112.  
  1113.  
  1114.  
  1115.  
  1116.  
  1117.  
  1118.  
  1119.  
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126.         FIGURE 7.6 FLOWCHART FOR THE DAMAGE.SOMETHING.EVENT
  1127.  
  1128.  
  1129.         :    DAMAGE.SOMETHING                             (110)
  1130.  
  1131.         SELECT.RANDOM.SHIP.SUB.SYSTEM                     (120)
  1132.         SET.RANDOM.ESTIMATED.TIME.TO.REPAIR.(ETR)
  1133.         SET.DAMAGE.STATUS
  1134.         DISPLAY.SUB-SYSTEM.DAMAGED.MESSAGE ;
  1135.  
  1136.         FIGURE 7.7 BASIC LANGUAGE VERSION OF SUBROUTINE TO MOVE THE ENTERPRISE PAGE #
  1137.  
  1138.         1300 REM NAV/WARP ENGINES/NAVIGATION 
  1139.         1310 INPUT "DIRECTION PLEASE (1-9) ";C : IF C<1 OR C>9 THEN 1310
  1140.         1320 INPUT "WARP FACTOR ";W : IF W=<0 THEN 1750
  1141.         1330 IF W>8 THEN PRINT " SIR WE CANNA GO THAT FAST" : GOTO 1320
  1142.         1340 IF D(0)=0 THEN 1360
  1143.         1350 IF W>=Z THEN PRINT D$(I);"DAMAGED (maximum allowable=.9) " : GOTO 1320
  1144.         1360 REM MOVE ON
  1145.         1370 S(S1,S2)=Z : T1=T : IF K>0 AND W>=Z THEN GOSUB 600 : IF F9>0 THEN 1750
  1146.         1380 Y1=S1+.5 : X1=S2+.5 : Y=(C-Z)*.785398 : X=COS(Y) : Y=-SIN(Y) 
  1147.         1390 FOR I=0 TO INT(W*8) : T=T-.1 : Y1=Y1+Y : X1=X1+X : Y2=INT(Y1) : X2=INT(X1)
  1148.         1400 IF X2<0 OR X2>7 OR Y2<0 OR Y2>7 THEN 1490
  1149.         1410 ON S(Y2,X2) GOTO 1470,1420,1470,1440,1450
  1150.         1420 PRINT "STAR DEAD AHEAD" : IF RND(Z)>.6 AND B=0 THEN 1640
  1151.         1430 PRINT "EMERGENCY ENGINE SHUT DOWN" : D(0)=D(0)+.5 : GOSUB 1780 : GOTO 1720
  1152.         1440 PRINT : PRINT "STAND BY FOR COLLISION WITH KLINGON" : GOSUB 1780 : GOSUB 110 : GOTO 1720
  1153.         1450 GOSUB 1780 : PRINT : PRINT "MESSAGE FROM STARBASE" : IF K>0 THEN PRINT "CLUMSY" : GOTO 1720
  1154.         1460 PRINT "ENTERPRISE CAUGHT IN TRACTOR BEAM BEFORE COLLISION" : GOTO 1720
  1155.         1470 NEXT : S1=Y2 : S2=X2 : S(Y2,X2)=3 : GOTO 1580
  1156.         1490 REM-OUT OF SECTOR
  1157.         1500 Q1=INT(Q1+W*Y+(S1+.5)/8) : Q2=INT(Q2+W*X+(S2+.5)/8) : T=T-.6
  1158.         1510 IF Q1<0 OR Q1>7 OR Q2<0 OR Q2>7 THEN 1550
  1159.         1520 REM INSIDE GALAXY
  1160.         1530 IF G9=Z THEN GOSUB 1760 : G9=0 
  1161.         1540 GOTO 1570
  1162.         1550 IF G9=0 THEN GOSUB 1760 : G9=Z
  1163.         1570 GOSUB 3200
  1164.         1580 I=INT(RND(Z)*100) : IF I=0 OR I>4 THEN 1720
  1165.         1590 IF G9=Z THEN 1680
  1166.         1600 PRINT : IF B>0 THEN 1720
  1167.         1610 ON I GOTO 1620,1640,1670,1680
  1168.         1620 PRINT CHR$(7);"KLINGON SPACE MINE " : H=RND(Z)*400 : GOSUB 130 : IF F9>0 THEN 1750
  1169.         1630 PRINT "SHIELDS DOWN TO"; E1; " UNITS" : GOTO 1720
  1170.         1640 PRINT "SPACE WARP DUE TO GRAVITATIONAL ANOMALY" : GOSUB 50 : Q1=INT(X-P) : Q2=INT(Y-P)
  1171.         1650 G9=0 : IF Q1<0 OR Q1>7 OR Q2<0 OR Q2>7 THEN G9=Z
  1172.         1660 PRINT "SENSORS SHOW WE SEEM TO HAVE MOVED TO QUADRANT"; Q1+Z;",";Q2+Z : GOSUB 3200 : GOTO 1740
  1173.         1670 PRINT CHR$(7);"ION STORM " : GOSUB 110 : GOTO 1720
  1174.         1680 REM SPOCK DOES HIS FIXING HERE
  1175.         1690 GOSUB 50 : FOR I=X TO C1-C2 : IF D(I)>0 THEN 1710
  1176.         1700 NEXT : FOR I=0 TO X : IF D(I)<=0 THEN NEXT : GOTO 1720
  1177.         1710 D(I)=0 : PRINT " Mr. SPOCK FIXED the ";D$(I)
  1178.         1720 E=E-((INT(W*8))^2)/2 : IF E<0 THEN F9=3 : GOTO 1750
  1179.         1730 GOSUB 1800 : IF E1>E THEN E1=E
  1180.         1740 GOSUB 3400
  1181.  
  1182.  
  1183.  
  1184.  
  1185.  
  1186.  
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192.         1750 RETURN
  1193.         1760 PRINT "CROSSING BARRIER at GALACTIC BOUNDARY" : GOSUB 110 : RETURN
  1194.         1780 REM SUBROUTINE TO BACK UP ONE SECTOR
  1195.         1790 S1=INT(Y1-Y) : S2=INT(X1-X) : S(S1,S2)=3 : RETURN
  1196.         1800 REM SUBROUTINE FOR REPAIRS AFTER TIME (T1-T)
  1197.         1810 IF T<0 THEN F9=4 : GOTO 1870
  1198.         1820 N=0 :FOR I=0 TO C1-C2 : IF D(I)=<0 THEN 1860
  1199.         1830 D(I)=D(I)-(T1-T) : IF D(I)>0 THEN 1860
  1200.         1840 IF N=0 THEN PRINT : PRINT "DAMAGE CONTROL REPORTING " : N=Z
  1201.         1850 D(I)=0 : PRINT D$(I);"REPAIRED" 
  1202.         1860 NEXT
  1203.         1870 RETURN
  1204.  
  1205.         110 REM SUBROUTINE TO DAMAGE SOMETHING
  1206.         120 Y=Z+RND(Z)*W : X=INT((C1-C2)*RND(Z)) : D(X)=Y+D(X) : PRINT D$(X); "DAMAGED" : RETURN
  1207.         130 REM ENERGY HIT SUBROUTINE
  1208.         140 E1=E1-H : E=E-H : IF E1=<0 THEN F9=2 : GOTO 160
  1209.         150 IF H>E1/2 THEN PRINT "SHIELD OVERLOAD ....."; : GOSUB 110
  1210.         160 RETURN
  1211.  
  1212.  
  1213.         FIGURE 7.8 COMPASS (BEARING) DIRECTIONS
  1214.  
  1215.  
  1216.             4     3     2
  1217.  
  1218.               \   :   /
  1219.                \  :  /
  1220.                 \ : /
  1221.                  \:/
  1222.            5 -----+---- 1 (9)
  1223.                  /:\
  1224.                 / : \
  1225.                /  :  \
  1226.               /   :   \
  1227.  
  1228.            6      7     8
  1229.  
  1230.         NOTE: Fractional directions are allowed and encouraged
  1231.  
  1232.  
  1233.  
  1234.  
  1235.  
  1236.  
  1237.  
  1238.  
  1239.  
  1240.  
  1241.  
  1242.  
  1243.  
  1244.  
  1245.  
  1246.  
  1247.  
  1248.  
  1249.  
  1250.  
  1251.  
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258.         FIGURE 7.9 FLOWCHART FOR ON BOARD REPAIRS
  1259.  
  1260.         : REPAIR.AS.WE.GO
  1261.         OUT.OF.TIME =?
  1262.                 YES     (1)     SET.END.OF.GAME.FLAG
  1263.                 NO      (2)     RESET.REPAIRED.SOMETHING.FLAG   1820
  1264.                                 LOOP    (Number of On-board systems)
  1265.                                 +       SYSTEM.DAMAGED =?
  1266.                                 +       YES     (2)     UPDATE.ETR
  1267.                                 +                       IS.IT.FIXED =?
  1268.                                 +                       YES     (3)     IS.IT.FIRST.ONE.THIS.TIME =?
  1269.                                 +                                       YES     (4)     DISPLAY.DAMAGE.CONTR[.MESSAGE
  1270.                                 +                                                       SET.REPAIE[.SOMETHING.FLAG
  1271.                                 +                                       THEN    (4)
  1272.                                 +                                       DISPLAY.FIXED.MESSAGE
  1273.                                 +                       THEN    (4)
  1274.                                 +       THEN    (2)
  1275.                                 LOOPEND
  1276.                 THEN    (1)     ;
  1277.  
  1278.  
  1279.         1800 REM SUBROUTINE FOR REPAIRS AFTER TIME (T1-T)
  1280.         1810 IF T<0 THEN F9=4 : GOTO 1870
  1281.         1820 N=0 :FOR I=0 TO C1-C2 : IF D(I)=<0 THEN 1860
  1282.         1830 D(I)=D(I)-(T1-T) : IF D(I)>0 THEN 1860
  1283.         1840 IF N=0 THEN PRINT : PRINT "DAMAGE CONTROL REPORTING " : N=Z
  1284.         1850 D(I)=0 : PRINT D$(I);"REPAIRED" 
  1285.         1860 NEXT
  1286.         1870 RETURN
  1287.  
  1288.  
  1289.         FIGURE 7.10 FLOWCHART TO DAMAGE SOMETHING
  1290.  
  1291.         : DAMAGE.SOMETHING
  1292.         SET.RANDOM[.TIME
  1293.         SET.RANDOM.SUB.SYSTEM
  1294.         ADD.TIME.TO.SUBSYSTEM.ETR
  1295.         DISPLAY.WHICH.SYSTEM.WAS.DAMAGED        ;
  1296.  
  1297.         FIGURE 7.12 FLOWCHART FOR ENERGY HIT
  1298.  
  1299.         ENERGYHIT
  1300.         DEDUCT.HIT.FROM.ON.BOARD.ENERGY
  1301.         DEDUCT.HIT.FROM.SHIELDS
  1302.         SHIELDS.BEATEN.DOWN =?
  1303.         YES     (1)     (ENTERPRISE.DESTROYED)
  1304.                         SET.END.OF.GAME.FLAG
  1305.         NO      (1)     MASSIVE.HIT =?
  1306.                         YES     (2)     DISPLAY.OVERLOAD.MESSAGE
  1307.                                         DAMAGE.SOMETHING
  1308.                         THEN    (2)
  1309.         THEN    (1)     ;
  1310.  
  1311.              
  1312.         :    PHOTON.TORPEDO                                                                                     (1000)
  1313.  
  1314.  
  1315.  
  1316.  
  1317.  
  1318.  
  1319.  
  1320.  
  1321.         FIGURE 8.1 FLOWCHART FOR THE PHOTON TORPEDO SUBROUTINE PAGE 21
  1322.  
  1323.  
  1324.  
  1325.         ARE.TUBES.DAMAGED                                                                                       (1010)
  1326.         YES  (1)  DISPLAY.DAMAGED.MESSAGE
  1327.         NO   (1)  ANY.LEFT =?                                                                                   (1020)
  1328.                   YES  (2)  DIALOG.TO.SET.DIRECTION                                                             (1030)
  1329.                             SET.MOVE.PARAMETERS                                                                 (1040)
  1330.                             LOOP (TORPEDO.IN.SECTOR)                                                            (1050)
  1331.                             +    MOVE.TORPEDO.ONE.SECTOR
  1332.                             +    OUTSIDE.QUADRANT =?                                                            (1060)
  1333.                             +    YES  (3)  DISPLAY.MISSED.MESSAGE
  1334.                             +    NO   (3)  DISPLAY.TRACK                                                        (1070)
  1335.                             +              IS.SECTOR.OCCUPIED =?
  1336.                             +              YES  (4)  IS.IT.A.KLINGON =?
  1337.                             +                        YES  (5)  DID.IT.DODGE.THE.TORPEDO =?                      (1100)
  1338.                             +                                  NO (5A)  DELETE.IT.FROM.QUADRANT                 (1220)
  1339.                             +                                           UPDATE.GAME.STATUS.DISPLAY
  1340.                             +                                           DISPLAY.HIT.MESSAGE
  1341.                             +                                  THEN     (5A)
  1342.                             +                        NO   (5)  IS.IT.A.STAR
  1343.                             +                                  YES  (6)  WAS.TORPEDO.ABSORBED.BY.STAR =?
  1344.                             +                                            YES  (6A)  DISPLAY.ABSORBED.MESSAGE    (1080)
  1345.                             +                                            NO   (6A)  DISPLAY.DEFLECTED.MESSAGE   (1090)
  1346.                             +                                                       CHANGE.COURSE.PARAMETERS
  1347.                             +                                            THEN (6A)
  1348.                             +                                  NO   (6)  IS.IT.A.STARBASE =?
  1349.                             +                                            YES (7) DESTROY.STARBASE               (1150)
  1350.                             +                                                    DISPLAY.MESSAGES
  1351.                             +                                            NO  (7) (Must be the ENTERPRISE)       (1190)
  1352.                             +                                                    DISPLAY.EVASIVE.ACTION.MESSAGE
  1353.                             +                                            THEN (7)
  1354.                             +                                  THEN (6)
  1355.                             +                       THEN (5)  
  1356.                             +              THEN (4)
  1357.                             +    THEN (3)
  1358.                             LOOPEND                                                                             (1200)
  1359.                   NO   (2)  DISPLAY.ALL.GONE.MESSAGE
  1360.                   THEN (2)
  1361.         THEN (1)  ;
  1362.  
  1363.  
  1364.  
  1365.  
  1366.  
  1367.  
  1368.  
  1369.  
  1370.  
  1371.  
  1372.  
  1373.  
  1374.  
  1375.  
  1376.  
  1377.  
  1378.  
  1379.  
  1380.  
  1381.  
  1382.  
  1383.  
  1384.  
  1385.  
  1386.  
  1387.         FIGURE 8.2 BASIC LANGUAGE IMPLEMENTATION OF PHOTON TORPEDO SUBROUTINE PAGE 22
  1388.  
  1389.  
  1390.         1000 REM TOR PHOTON TORPEDOES
  1391.         1010 IF D(I) > 0 THEN PRINT "TUBES BLOCKED" : GOTO 1210
  1392.         1020 IF P = 0 THEN PRINT "NO TORPEDOE's LEFT SIR !" : GOTO 1210
  1393.         1030 INPUT "DIRECTION (1-9) ";C : IF C<1 OR C>9 THEN 1030
  1394.         1040 Y1=S1+.5 : X1=S2+.5 : Y=(C-Z)*.785398 : X=COS(Y) : Y=-SIN(Y) : PRINT "TRACK" 
  1395.         1050 P=P-Z : FOR J=0 TO E0 : Y1=Y1+Y : X1=X1+X : Y2=INT(Y1) : X2=INT(X1)
  1396.         1060 IF X2<0 OR X2>7 OR Y2<0 OR Y2>7 THEN PRINT "MISSED" : GOTO 1210
  1397.         1070 PRINT Y2+Z;",";X2+Z : ON S(Y2,X2) GOTO 1200,1080,1190,1100,1150
  1398.         1080 PRINT "STAR "; : IF RND(Z)<.5 THEN PRINT "ABSORBED TORPEDO" : GOTO 1210
  1399.         1090 PRINT "DEFLECTED TORPEDO" : Y=Z+RND(Z)*8*.785398 : X=COS(Y) : Y=-SIN(Y) : GOTO 1200
  1400.         1100 IF RND(Z)>.9 THEN 1200
  1401.         1110 PRINT " KLINGON DESTROYED"
  1402.         1120 FOR I=0 TO 7 : IF Y2=K1(I) AND X2=K2(I) THEN 1140
  1403.         1130 NEXT I : PRINT "SENSOR  MALFUNCTION";CHR$(7)
  1404.         1140 K3(I)=0 : GOSUB 1220 :  GOTO 1180 
  1405.         1150 PRINT " STARBASE DESTROYED, WELL DONE" : B=B-Z : B9=B9-10 : K8=K9 : T9=T+Z
  1406.         1160 IF Q(Q1,Q2)<0 THEN Q(Q1,Q2)=Q(Q1,Q2)+10 ELSE Q(Q1,Q2)=Q(Q1,Q2)-10
  1407.         1170 IF B9=0 THEN PRINT : PRINT "THAT WAS YOUR LAST STARBASE"
  1408.         1180 S(Y2,X2)=Z : GOTO 1210
  1409.         1190 PRINT CHR$(7);"EVASIVE ACTION ....missed us"
  1410.         1200 NEXT J
  1411.         1210 RETURN
  1412.         1220 REM SUBROUTINE TO CLEAR KLINGON FROM SIMULATION
  1413.         1230 K=K-Z : K9=K9-100 : IF K9=0 THEN F9=5
  1414.         1240 IF Q(Q1,Q2)<0 THEN Q(Q1,Q2)=Q(Q1,Q2)+100 ELSE Q(Q1,Q2)=Q(Q1,Q2)-100
  1415.         1250 RETURN
  1416.  
  1417.  
  1418.  
  1419.  
  1420.  
  1421.  
  1422.  
  1423.  
  1424.  
  1425.  
  1426.  
  1427.  
  1428.  
  1429.  
  1430.  
  1431.  
  1432.  
  1433.  
  1434.  
  1435.  
  1436.  
  1437.  
  1438.  
  1439.  
  1440.  
  1441.  
  1442.  
  1443.  
  1444.  
  1445.  
  1446.  
  1447.  
  1448.  
  1449.  
  1450.  
  1451.  
  1452.  
  1453.         FIGURE 8.3 FLOWCHART FOR THE PHASER FUNCTION PAGE 23
  1454.  
  1455.  
  1456.         :    PHASER.FIRE                                       (800)
  1457.  
  1458.         KLINGONS.IN.QUADRANT =?                                (810)
  1459.         YES  (1)  PHASERS.WORKING =?                           (820)
  1460.                   YES  (2)  SHORT.RANGE.SENSORS.WORKING =?     (830)
  1461.                             NO   (3)  DISPLAY.BEST.GUESS.MESSAGE
  1462.                             THEN (3)
  1463.                             ALLOCATE.ENERGY.TO.PHASER.CONTROL  (840)
  1464.                             SUBTRACT.ENERGY.FROM.SHIPSPOWER    (850)
  1465.                             LOOP (on Klingons in Quadrant)     (860)
  1466.                             +    COMPUTE.HIT                   (880)
  1467.                             +    DECREMENT.ITS.SHIELD.POWER
  1468.                             +    DISPLAY.HIT.MESSAGE
  1469.                             +    SHIELD.DOWN =? (<=0)
  1470.                             +    YES  (4)  DELETE.IT.FROM.QUADRANT
  1471.                             +              UPDATE.GAME.STATUS
  1472.                             +    THEN (4)  KLINGONS'S.SHIELD.LOW =?
  1473.                             +              YES  (5)  KLINGON.SURRENDERS =?
  1474.                             +                        YES  (6)  DELETE.IT.FROM.QUADRANT
  1475.                             +                                  UPDATE.GAME.STATUS
  1476.                             +                                  BOARDING.PARTY.OPERATION
  1477.                             +                        NO   (6)  KLINGON.SELFDESTRUCTS = ?
  1478.                             +                                  YES  (7) DELETE.IT.FROM.QUADRANT
  1479.                             +                                           UPDATE.GAME.STATUS.DISPLAY
  1480.                             +                                  THEN (7)
  1481.                             +                        THEN (6)
  1482.                             +              THEN (5)
  1483.                             +    THEN (4)
  1484.                             LOOPEND
  1485.                   NO   (2)  DISPLAY.NOT.WORKING.MESSAGE
  1486.                   THEN (2)
  1487.         NO   (1)  DISPLAY.MESSAGE.THAT.NO.TARGETS.IN.SECTOR
  1488.         THEN (1)  ;
  1489.  
  1490.  
  1491.  
  1492.  
  1493.  
  1494.  
  1495.  
  1496.  
  1497.  
  1498.  
  1499.  
  1500.  
  1501.  
  1502.  
  1503.  
  1504.  
  1505.  
  1506.  
  1507.  
  1508.  
  1509.  
  1510.  
  1511.  
  1512.  
  1513.  
  1514.  
  1515.  
  1516.  
  1517.  
  1518.  
  1519.          FIGURE 8.4 BASIC LANGUAGE IMPLEMENTATION OF PHASER COMMAND
  1520.  
  1521.  
  1522.         800 REM PHA PHASERS
  1523.         810 IF K=0 THEN PRINT "No targets in quadrant .......  sir " : GOTO 950
  1524.         820 IF D(I)>0 THEN PRINT D$(I);"OUT OF ACTION SIR" : GOTO 950
  1525.         830 IF D(1)>0 THEN PRINT D$(1);"are not working, will use best guess settings"
  1526.         840 INPUT "READY- how much energy do you want to fire "; X : IF X<=0 THEN 950
  1527.         850 IF X>(E-E1) THEN PRINT "We don't have that much energy available sir" : GOTO 840
  1528.         860 E = E - X : Y = K : FOR I = 0 TO 7 : IF K3(I)<=0 THEN 940
  1529.         870 IF D(1)>0 THEN X = X*RND(Z)
  1530.         880 H = X/(Y*(SQR((K1(I)-S1)^2+(K2(I)-S2)^2)^.4)) : K3(I) = K3(I) - H
  1531.         890 PRINT "Hit on KLINGON at";K1(I)+Z;",";K2(I)+Z; : IF D(1)=0 THEN PRINT "(";K3(I);"Units left)" ELSE PRINT
  1532.         900 IF K3(I)<=0 THEN K3(I) = 0 : PRINT "KLINGON DESTROYED" : S(K1(I),K2(I)) = Z : GOSUB 1220 : GOTO 940
  1533.         910 IF K>Z OR K3(I)>E1/100 OR RND(Z)>.4 THEN 940
  1534.         920 K3(I)=0 : S(K1(I),K2(I))=Z : GOSUB 1220 : IF RND(Z)<.7 THEN PRINT "KLINGON EXPLODED" : K5=K5+Z : GOTO 940
  1535.         930 PRINT "KLINGON SURRENDERS .....Boarding party away" : K4 = K4 + Z : T1 = T : T = T - .5 : GOSUB 1800
  1536.         940 NEXT
  1537.         950 RETURN
  1538.  
  1539.  
  1540.  
  1541.  
  1542.  
  1543.  
  1544.  
  1545.  
  1546.  
  1547.  
  1548.  
  1549.  
  1550.  
  1551.  
  1552.  
  1553.  
  1554.  
  1555.  
  1556.  
  1557.  
  1558.  
  1559.  
  1560.  
  1561.  
  1562.  
  1563.  
  1564.  
  1565.  
  1566.  
  1567.  
  1568.  
  1569.  
  1570.  
  1571.  
  1572.  
  1573.  
  1574.  
  1575.  
  1576.  
  1577.  
  1578.  
  1579.  
  1580.  
  1581.  
  1582.  
  1583.  
  1584.  
  1585.         FIGURE 8.5 FLOWCHART FOR SHIELDS COMMAND 
  1586.  
  1587.  
  1588.  
  1589.         :    SHIELDS                                                         (2700)
  1590.  
  1591.         IS.ENTERPRISE.DOCKED =?                                              (2710)
  1592.         YES  (1)  DISPLAY.RULES.MESSAGE
  1593.         NO   (1)  ARE.SHIELDS.DAMAGED =?                                     (2720)
  1594.                   YES  (2)  DISPLAY.DAMAGED.MESSAGE
  1595.                   NO   (2)  DIALOG.TO.AND.ASSIGN.ENERGY.TO.SHIELDS           (2740)
  1596.                   THEN (2)
  1597.         THEN (1)  ;
  1598.  
  1599.  
  1600.  
  1601.  
  1602.  
  1603.  
  1604.  
  1605.  
  1606.  
  1607.  
  1608.  
  1609.  
  1610.  
  1611.  
  1612.  
  1613.  
  1614.  
  1615.  
  1616.  
  1617.  
  1618.  
  1619.  
  1620.  
  1621.  
  1622.  
  1623.  
  1624.  
  1625.  
  1626.  
  1627.  
  1628.  
  1629.  
  1630.  
  1631.  
  1632.  
  1633.  
  1634.  
  1635.  
  1636.  
  1637.  
  1638.  
  1639.  
  1640.  
  1641.  
  1642.  
  1643.  
  1644.  
  1645.  
  1646.  
  1647.  
  1648.  
  1649.  
  1650.  
  1651.         FIGURE 8.6 BASIC LANGUAGE IMPLEMENTATION OF SHIELDS COMMAND 
  1652.  
  1653.  
  1654.         2700 REM SHE SHIELDS
  1655.         2710 IF C$="DOCKED" THEN PRINT "Regulations forbid raising the shields when docked" : GOTO 2770
  1656.         2720 IF D(I)>0 THEN PRINT D$(I)+"DAMAGED" : GOTO 2770
  1657.         2730 PRINT D$(I);"currently at";E1;"Units"
  1658.         2740 INPUT "How much energy to divert to the shields Sir ";N : IF N<0 THEN 2740
  1659.         2750 IF N>E THEN PRINT "WE DON'T HAVE THAT MUCH SIR" : GOTO 2740
  1660.         2760 E1=N
  1661.         2770 RETURN
  1662.  
  1663.  
  1664.         :    SHOOTBACK (ROUTINE FOR KLINGONS SHOOTING BACK)              (600)
  1665.  
  1666.         IS.ENTERPRISE.DOCKED =?                                          (610)
  1667.         NO   (1)  LOOP (0 to 7)                                          (620)
  1668.                   +    GAME.OVER.FLAG.SET =?
  1669.                   +    NO   (2)  KLINGON.ACTIVE =?
  1670.                   +              YES  (3)  HOSTILE.ACTION =?
  1671.                   +                        YES  (4)  TORPEDO.FIRED =?
  1672.                   +                                  YES  (5)  TORPEDO.HIT =?
  1673.                   +                                            YES  (6)  DAMAGE.SOMETHING
  1674.                   +                                            NO   (6)  DISPLAY.MISS.MESSAGE
  1675.                   +                                            THEN (6)
  1676.                   +                                  NO   (5)  (PHASER)                 (640)
  1677.                   +                                            COMPUTE.ENERGY.FIRED
  1678.                   +                                            UPDATE.KLINGON.ENERGY.SUPPLY
  1679.                   +                                            COMPUTE.ENERGY.IN.HIT
  1680.                   +                                            UPDATE.ENTERPRISE.SHIELDS
  1681.                   +                                            SHIELDS.LESS.THAN.0 =? 
  1682.                   +                                            YES  (7)  SET.GAME.OVER.FLAG
  1683.                   +                                            THEN (7)
  1684.                   +                                            MASSIVE.HIT =?
  1685.                   +                                            YES  (8)  DAMAGE.SOMETHING
  1686.                   +                                            THEN (8)
  1687.                   +                                  THEN (5)
  1688.                   +                        THEN (4)
  1689.                   +              THEN (3)
  1690.                   +    THEN (2)
  1691.                   LOOPEND
  1692.                   SHIELDS.LOW =?
  1693.                   YES  (6)  DISPLAY.WARNING.MESSAGE
  1694.                   THEN (6)
  1695.         THEN (1)  ;
  1696.  
  1697.  
  1698.  
  1699.  
  1700.  
  1701.  
  1702.  
  1703.  
  1704.  
  1705.  
  1706.  
  1707.  
  1708.  
  1709.  
  1710.  
  1711.  
  1712.  
  1713.  
  1714.  
  1715.  
  1716.  
  1717.         FIGURE 9.2 BASIC LANGUAGE VERSION OF SHOOTBACK FUNCTION
  1718.  
  1719.  
  1720.  
  1721.         600 REM SHOOTBAK SUBROUTINE
  1722.         610 IF C$="DOCKED" THEN 680 
  1723.         620 FOR I=0 TO 7 : IF K3(I)<=0 OR RND(Z)<.1*(I+Z) THEN 670
  1724.         630 IF RND(Z)>K3(I)/500 THEN PRINT "KLINGON TORPEDO"; : H=RND(Z)*E1 : E1=E1+H : E=E+H : GOTO 660
  1725.         640 H=K3(I)*.4*RND(Z) : K3(I)=K3(I)-H : H=H/(SQR((K1(I)-S1)^2+(K2(I)-S2)^2))^.4
  1726.         650 PRINT H;"Unit hit on Enterprise";
  1727.         660 PRINT " from sector";K1(I)+Z;",";K2(I)+Z : GOSUB 130 : IF F9>0 THEN 680
  1728.         670 NEXT : IF E1<100 THEN PRINT D$(6);" Dangerously low";CHR$(7)
  1729.         680 RETURN
  1730.  
  1731.  
  1732.  
  1733.  
  1734.  
  1735.  
  1736.  
  1737.  
  1738.  
  1739.  
  1740.  
  1741.  
  1742.  
  1743.  
  1744.  
  1745.  
  1746.  
  1747.  
  1748.  
  1749.  
  1750.  
  1751.  
  1752.  
  1753.  
  1754.  
  1755.  
  1756.  
  1757.  
  1758.  
  1759.  
  1760.  
  1761.  
  1762.  
  1763.  
  1764.  
  1765.  
  1766.  
  1767.  
  1768.  
  1769.  
  1770.  
  1771.  
  1772.  
  1773.  
  1774.  
  1775.  
  1776.  
  1777.  
  1778.  
  1779.  
  1780.  
  1781.  
  1782.  
  1783.         FIGURE 9.3 ALTERNATE FORM OF THE SHOOTBACK SUBROUTINE
  1784.  
  1785.  
  1786.  
  1787.         (600) REM SHOOTBAK SUBROUTINE
  1788.         (610) IF C$="DOCKED" THEN 680 
  1789.         (620) FOR I=0 TO 7 : IF K3(I)<=0 OR RND(Z)<.1*(I+Z) THEN 670
  1790.                   (630) IF RND(Z)>K3(I)/500 
  1791.                         PRINT "KLINGON TORPEDO"; : H=RND(Z)*E1 : E1=E1+H : E=E+H 
  1792.                         ELSE (640) H=K3(I)*.4*RND(Z) : K3(I)=K3(I)-H : H=H/(SQR((K1(I)-S1)^2+(K2(I)-S2)^2))^.4
  1793.                              (650) PRINT H;"Unit hit on Enterprise";
  1794.                         THEN (660) PRINT " from sector";K1(I)+Z;",";K2(I)+Z
  1795.                              (130) REM ENERGY HIT SUBROUTINE
  1796.                              (140) E1=E1-H : E=E-H
  1797.                                    IF E1=<0 THEN F9=2 : GOTO 160
  1798.                              (150) IF H>E1/2 THEN PRINT "SHIELD OVERLOAD ....."; : GOSUB 110
  1799.                                    IF F9>0 THEN 680
  1800.                         ELSE 
  1801.              (670) NEXT : 
  1802.                         THEN IF E1<100 THEN PRINT D$(6);" Dangerously low";CHR$(7)
  1803.         (680) RETURN
  1804.  
  1805.  
  1806.  
  1807.  
  1808.  
  1809.  
  1810.  
  1811.  
  1812.  
  1813.  
  1814.  
  1815.  
  1816.  
  1817.  
  1818.  
  1819.  
  1820.  
  1821.  
  1822.  
  1823.  
  1824.  
  1825.  
  1826.  
  1827.  
  1828.  
  1829.  
  1830.  
  1831.  
  1832.  
  1833.  
  1834.  
  1835.  
  1836.  
  1837.  
  1838.  
  1839.  
  1840.  
  1841.  
  1842.  
  1843.  
  1844.  
  1845.  
  1846.  
  1847.  
  1848.  
  1849.         FIGURE 9.4 FLOWCHART FOR MOVING KLINGONS AROUND
  1850.  
  1851.  
  1852.  
  1853.         : MOVEKLINGON                                     (700)
  1854.  
  1855.         LOOP ( 7 times (number of possible KLINGONS in quadrant) )
  1856.         +    KLINGON.ACTIVE =?                            (710)
  1857.         +    YES  (1)  FIND.RANDOM.SECTOR                 (720)
  1858.         +              SECTOR.EMPTY  =?
  1859.         +              YES  (2)  MOVE.KLINGON.INTO.IT     (730)
  1860.         +              THEN (2)
  1861.         +    THEN (1)
  1862.         LOOPEND   ;                                       (740)
  1863.  
  1864.  
  1865.  
  1866.  
  1867.  
  1868.  
  1869.  
  1870.  
  1871.  
  1872.  
  1873.  
  1874.  
  1875.  
  1876.  
  1877.  
  1878.  
  1879.  
  1880.  
  1881.  
  1882.  
  1883.  
  1884.  
  1885.  
  1886.  
  1887.  
  1888.  
  1889.  
  1890.  
  1891.  
  1892.  
  1893.  
  1894.  
  1895.  
  1896.  
  1897.  
  1898.  
  1899.  
  1900.  
  1901.  
  1902.  
  1903.  
  1904.  
  1905.  
  1906.  
  1907.  
  1908.  
  1909.  
  1910.  
  1911.  
  1912.  
  1913.  
  1914.  
  1915.         FIGURE 9.5 BASIC LANGUAGE VERSION OF MOVE KLINGON FUNCTION
  1916.  
  1917.  
  1918.  
  1919.         700 REM MOVE KLINGON ROUTINE
  1920.         710 FOR I=0 TO 7 : IF K3(I)<=0 THEN 740
  1921.         720 GOSUB 50 : IF S(X,Y)<>Z THEN 740
  1922.         730 S(K1(I),K2(I))=Z : K1(I)=X : K2(I)=Y : S(X,Y)=4
  1923.         740 NEXT : RETURN
  1924.  
  1925.  
  1926.  
  1927.  
  1928.  
  1929.  
  1930.  
  1931.  
  1932.  
  1933.  
  1934.  
  1935.  
  1936.  
  1937.  
  1938.  
  1939.  
  1940.  
  1941.  
  1942.  
  1943.  
  1944.  
  1945.  
  1946.  
  1947.  
  1948.  
  1949.  
  1950.  
  1951.  
  1952.  
  1953.  
  1954.  
  1955.  
  1956.  
  1957.  
  1958.  
  1959.  
  1960.  
  1961.  
  1962.  
  1963.  
  1964.  
  1965.  
  1966.  
  1967.  
  1968.  
  1969.  
  1970.  
  1971.  
  1972.  
  1973.  
  1974.  
  1975.  
  1976.  
  1977.  
  1978.  
  1979.  
  1980.  
  1981.         FIGURE 9.6 FLOWCHART OF THE IMPLEMENTATION OF THE RESIGN COMMAND
  1982.  
  1983.  
  1984.  
  1985.         : RESIGN                                               (2600)
  1986.  
  1987.         KLINGONS.IN.QUADRANT =?                                (2610)
  1988.         YES  (1)  SURRENDER.NOT.ALLOWED
  1989.         NO   (1)  REQUEST.CONFIRMATION                         (2620)
  1990.                   RESIGN.WANTED =?
  1991.                   YES  (2)  SET.END.OF.GAME.FLAG.TO.'RESIGN'   (2640)
  1992.                   THEN (2)
  1993.         THEN (1)  ;
  1994.  
  1995.  
  1996.  
  1997.  
  1998.  
  1999.  
  2000.  
  2001.  
  2002.  
  2003.  
  2004.  
  2005.  
  2006.  
  2007.  
  2008.  
  2009.  
  2010.  
  2011.  
  2012.  
  2013.  
  2014.  
  2015.  
  2016.  
  2017.  
  2018.  
  2019.  
  2020.  
  2021.  
  2022.  
  2023.  
  2024.  
  2025.  
  2026.  
  2027.  
  2028.  
  2029.  
  2030.  
  2031.  
  2032.  
  2033.  
  2034.  
  2035.  
  2036.  
  2037.  
  2038.  
  2039.  
  2040.  
  2041.  
  2042.  
  2043.  
  2044.  
  2045.  
  2046.  
  2047.         FIGURE 9.7 BASIC LANGUAGE IMPLEMENTATION OF RESIGN COMMAND
  2048.  
  2049.  
  2050.  
  2051.         2600 REM RES RESIGN
  2052.         2610 IF K>0 THEN PRINT : PRINT "YOUR SURRENDER WILL NOT BE ACCEPTED " :  GOTO 2650
  2053.         2620 INPUT "ARE YOU SURE (Yes/No) ";A$ : IF LEN(A$)=0 THEN 2620
  2054.         2630 IF LEFT$(A$,Z)="N" THEN 2660
  2055.         2640 IF LEFT$(A$,Z)="Y" THEN F9=Z
  2056.         2650 GOTO 2620
  2057.         2660 RETURN
  2058.  
  2059.         FIGURE 9.8 TRANSPORTER FLOWCHART
  2060.  
  2061.         IS.IT.DAMAGED =?                                  (3600)
  2062.         YES  (1)  PRINT.DAMAGED.MESSAGE
  2063.         NO   (1)  ARE.SHORT.RANGE.SENSORS.DAMAGED =?
  2064.                   YES  (2)  DISPLAY.DAMAGED.MESSAGE
  2065.                   NO   (2)  IS.QUADRANT.SCANNED =?        (3630)
  2066.                        YES  (3)  ARE.SHIELDS.UP =?        (3640)
  2067.                             YES  (4)  DISPLAY.WARNING.MESSAGE
  2068.                             NO   (4)  ANY.KLINGONS.IN.QUADRANT (3650)
  2069.                                  YES  (5)  DISPLAY.WARNING.MESSAGE
  2070.                                  NO   (5)  DIALOG.TO.INPUT.DESTINATION.CO-ORDINATES (3660)
  2071.                                            ARE.CO=ORDINATES.BLANK =?
  2072.                                            YES  (6)  COMPUTE.ENERGY.REQUIRED.TO.TRANSPORT.THERE (3680)
  2073.                                                      IS.THE.ENERGY.AVAILABLE =?
  2074.                                                      YES  (7)  ADJUST.ENTERPRISE.ENERGY.LEVELS  (3690)
  2075.  
  2076.                                                      NO   (7)  PRINT.WARNING
  2077.                                                      THEN (7)
  2078.                                            NO   (6)  PRINT.THERE.IS.NOTHING.AT.THOSE.CO-ORDINATES
  2079.                                            THEN (6)
  2080.                                  THEN (5)
  2081.                             THEN (4)
  2082.                        NO   (3)  DISPLAY.MESSAGE.STATING.THAT.FACT
  2083.  
  2084.  
  2085.  
  2086.  
  2087.  
  2088.  
  2089.  
  2090.  
  2091.  
  2092.  
  2093.  
  2094.  
  2095.  
  2096.  
  2097.  
  2098.  
  2099.  
  2100.  
  2101.  
  2102.  
  2103.  
  2104.  
  2105.  
  2106.  
  2107.  
  2108.  
  2109.  
  2110.  
  2111.  
  2112.  
  2113.